// 验证新初始化脚本与现有系统的兼容性

const fs = require('fs');
const path = require('path');

function verifyCompatibility() {
  console.log('🔍 验证新初始化脚本与现有系统的兼容性...\n');
  
  try {
    // 1. 检查两个脚本文件是否存在
    const initSchemaPath = path.join(__dirname, 'init-schema.sql');
    const auditSchemaPath = path.join(__dirname, '../server/audit-schema.sql');
    
    console.log('1. 检查脚本文件存在性:');
    const initSchemaExists = fs.existsSync(initSchemaPath);
    const auditSchemaExists = fs.existsSync(auditSchemaPath);
    
    console.log(`   统一初始化脚本: ${initSchemaExists ? '✅ 存在' : '❌ 不存在'}`);
    console.log(`   审计脚本: ${auditSchemaExists ? '✅ 存在' : '❌ 不存在'}`);
    
    if (!initSchemaExists || !auditSchemaExists) {
      console.log('\n❌ 部分脚本文件缺失，兼容性验证失败');
      return;
    }
    
    // 2. 读取两个脚本的内容
    const initSchemaContent = fs.readFileSync(initSchemaPath, 'utf8');
    const auditSchemaContent = fs.readFileSync(auditSchemaPath, 'utf8');
    
    console.log('\n2. 检查重复定义:');
    
    // 检查是否有重复的表定义
    const tablesToCheck = ['tasklist_audit'];
    let hasDuplicates = false;
    
    for (const table of tablesToCheck) {
      const initHasTable = initSchemaContent.includes(`CREATE TABLE IF NOT EXISTS ${table}`) || 
                          initSchemaContent.includes(`CREATE TABLE ${table}`);
      const auditHasTable = auditSchemaContent.includes(`CREATE TABLE IF NOT EXISTS ${table}`) || 
                           auditSchemaContent.includes(`CREATE TABLE ${table}`);
      
      if (initHasTable && auditHasTable) {
        console.log(`   ⚠️  表 ${table} 在两个脚本中都定义了，可能存在重复`);
        hasDuplicates = true;
      }
    }
    
    // 检查是否有重复的触发器定义
    const triggersToCheck = ['track_tasklist_is_issued_update', 'track_tasklist_is_issued_insert'];
    for (const trigger of triggersToCheck) {
      const initHasTrigger = initSchemaContent.includes(`CREATE TRIGGER IF NOT EXISTS ${trigger}`) || 
                            initSchemaContent.includes(`CREATE TRIGGER ${trigger}`);
      const auditHasTrigger = auditSchemaContent.includes(`CREATE TRIGGER IF NOT EXISTS ${trigger}`) || 
                             auditSchemaContent.includes(`CREATE TRIGGER ${trigger}`);
      
      if (initHasTrigger && auditHasTrigger) {
        console.log(`   ⚠️  触发器 ${trigger} 在两个脚本中都定义了，可能存在重复`);
        hasDuplicates = true;
      }
    }
    
    if (!hasDuplicates) {
      console.log('   ✅ 未发现重复定义');
    }
    
    console.log('\n3. 检查依赖关系:');
    
    // 检查审计表是否依赖于TaskList表
    const initHasTaskList = initSchemaContent.includes('CREATE TABLE IF NOT EXISTS TaskList') || 
                           initSchemaContent.includes('CREATE TABLE TaskList');
    const auditRefersTaskList = auditSchemaContent.includes('TaskList');
    
    if (initHasTaskList && auditRefersTaskList) {
      console.log('   ✅ 统一初始化脚本创建TaskList表，审计脚本正确引用');
    } else if (!initHasTaskList && auditRefersTaskList) {
      console.log('   ⚠️  审计脚本引用TaskList表，但统一初始化脚本未定义');
    }
    
    console.log('\n4. 工作机制说明:');
    console.log('   数据库服务初始化流程:');
    console.log('   1. 优先尝试使用统一初始化脚本 (database/init-schema.sql)');
    console.log('   2. 如果统一脚本不存在，则使用内置初始化逻辑');
    console.log('   3. 内置逻辑会加载审计脚本 (server/audit-schema.sql)');
    console.log('   4. 两种方式都会创建完整的表结构和触发器');
    
    console.log('\n5. 推荐使用方式:');
    console.log('   ✅ 推荐使用统一初始化脚本，因为它包含了所有定义');
    console.log('   ⚠️ 审计脚本作为后备方案保留，但可能包含重复定义');
    
    console.log('\n✅ 兼容性验证完成');
    console.log('\n📋 总结:');
    console.log('   - 两个脚本文件都存在');
    console.log('   - 数据库服务有智能加载机制');
    console.log('   - 建议优先使用统一初始化脚本');
    console.log('   - 可以考虑移除重复定义以避免混淆');
    
  } catch (error) {
    console.error('❌ 验证过程中发生错误:', error);
  }
}

// 运行验证
verifyCompatibility();